HAVING Clause क्या हैं?
HAVING क्लॉज को SQL में जोड़ा गया था क्योंकि WHERE कीवर्ड का उपयोग समग्र कार्यों के साथ नहीं किया जा सकता है।
वाक्यविन्यास होना
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s);
प्रदर्शन डेटाबेस
नीचे नॉर्थविंड नमूना डेटाबेस में "ग्राहक" तालिका से एक चयन है:
ग्राहक तालिका
+------------+--------------------------------+----------------+-------------------+----------+------------+---------+
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
+------------+--------------------------------+----------------+-------------------+----------+------------+---------+
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados... | Ana Trujillo | Avda. Constitución| México | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berg | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
+------------+--------------------------------+----------------+-------------------+----------+------------+---------+
एसक्यूएल हैविंग के उदाहरण
निम्नलिखित SQL कथन प्रत्येक देश में ग्राहकों की संख्या सूचीबद्ध करता है। केवल 5 से अधिक ग्राहकों वाले देशों को जोड़ें:
उदाहरण
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;
निम्नलिखित SQL कथन प्रत्येक देश में ग्राहकों की संख्या को उच्चतम से निम्नतम के आधार पर क्रमबद्ध करता है (केवल 5 से अधिक ग्राहकों वाले देशों को जोड़ें):
उदाहरण
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5
ORDER BY COUNT(CustomerID) DESC;
अतिरिक्त प्रदर्शन डेटाबेस
नॉर्थविंड नमूना डेटाबेस में "ऑर्डर" तालिका से एक चयन:
आदेश तालिका
+---------+------------+-----------+------------+------------+
| OrderID | CustomerID | EmployeeID | OrderDate | ShipperID |
+---------+------------+-----------+------------+------------+
| 10248 | 90 | 5 | 1996-07-04 | 3 |
| 10249 | 81 | 6 | 1996-07-05 | 1 |
| 10250 | 34 | 4 | 1996-07-08 | 2 |
+---------+------------+-----------+------------+------------+
और "कर्मचारी" तालिका से एक चयन:
कर्मचारियों की मेज
+------------+-----------+-----------+------------+------------+----------------------+
| EmployeeID | LastName | FirstName | BirthDate | Photo | Notes |
+------------+-----------+-----------+------------+------------+----------------------+
| 1 | Davolio | Nancy | 1968-12-08 | EmpID1.pic | Education includes...|
| 2 | Fuller | Andrew | 1952-02-19 | EmpID2.pic | Andrew received... |
| 3 | Leverling | Janet | 1963-08-30 | EmpID3.pic | Janet has a BS... |
+------------+-----------+-----------+------------+------------+----------------------+
होने के और भी उदाहरण
निम्नलिखित SQL कथन उन कर्मचारियों को सूचीबद्ध करता है जिन्होंने 10 से अधिक ऑर्डर बुक किए हैं:
उदाहरण
SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM (Orders
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID)
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 10;
यदि कर्मचारी "डेवोलियो" या "फुलर" ने 25 से अधिक ऑर्डर दिए हैं तो निम्नलिखित SQL कथन सूचीबद्ध करता है:
उदाहरण
SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM Orders
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
WHERE LastName = 'Davolio' OR LastName = 'Fuller'
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 25;
WHERE vs HAVING
WHERE Clause
- पंक्तियोंसमूह बनाने से पहलेफ़िल्टर करने के लिए उपयोग किया जाता है
- अलग-अलग पंक्तियों पर काम करता है
- समग्र कार्यों के साथ प्रयोग करेंनहीं कर सकता
- ग्रुप बाय के लिएपहलेआ रहा है
SELECT Country, COUNT(*)
FROM Customers
WHERE Country IN ('Germany', 'France')
GROUP BY Country;
HAVING Clause
- समूहसमूहीकरण के बादफ़िल्टर करने के लिए उपयोग किया जाता है
- समूहीकृत परिणामों पर कार्य करता है
- समग्र कार्यों के साथ प्रयोग करेंकर सकना
- ग्रुप बाय के लिएबाद मेंआ रहा है
SELECT Country, COUNT(*)
FROM Customers
GROUP BY Country
HAVING COUNT(*) > 5;
महत्वपूर्ण अंतर:
WHEREअलग-अलग पंक्तियों को फ़िल्टर करता है,HAVINGसमूहीकृत परिणाम फ़िल्टर करें.
जहां बनाम दृश्य प्रतिनिधित्व होना
FROM & WHERE
डेटा तालिका से प्राप्त किया जाता है और पंक्तियों को WHERE में फ़िल्टर किया जाता है
FROM Customers WHERE Country='Germany'
GROUP BY
फ़िल्टर की गई पंक्तियों को समूहीकृत किया गया है
GROUP BY City
HAVING
समूहीकृत परिणाम HAVING द्वारा फ़िल्टर किए जाते हैं
HAVING COUNT(*) > 2
SELECT & ORDER BY
अंतिम परिणाम चयनित और क्रमबद्ध किए जाते हैं
SELECT City, COUNT(*) ORDER BY COUNT(*) DESC
टिप्पणी:WHERE ग्रुपिंग के लिएपहलेकाम करता है, समूहीकरण के लिएबाद मेंकाम करता है.
व्यावहारिक उपयोग के मामले
अदाकारी का समीक्षण
ऐसे कर्मचारियों या ग्राहकों की पहचान करना जो निश्चित सीमा से अधिक हैं
SELECT EmployeeID, COUNT(OrderID)
FROM Orders
GROUP BY EmployeeID
HAVING COUNT(OrderID) > 50;
बिक्री रिपोर्ट
उन उत्पादों की पहचान करना जिन्होंने विशिष्ट बिक्री संकेतक हासिल किए हैं
SELECT ProductID, SUM(Quantity)
FROM OrderDetails
GROUP BY ProductID
HAVING SUM(Quantity) > 1000;
भौगोलिक विश्लेषण
ग्राहकों की विशिष्ट संख्या वाले शहर ढूँढ़ने के लिए
SELECT City, COUNT(CustomerID)
FROM Customers
GROUP BY City
HAVING COUNT(CustomerID) > 3;